OnesLike

对输出数组的所有元素填充数值 1。对于复数类型,实部填充 1.0,虚部填充 0.0。

\[\text{对于实数类型:}\quad output_i = 1\]
\[\text{对于复数类型:}\quad output_i = 1 + 0i\]
输入:
  • output - 待填充的目标内存地址。

  • length - 处理的元素个数(对于复数类型,指复数的个数)。

  • core_mask(int, 可选) - 核掩码(仅适用于共享存储版本)。

输出:
  • output - 填充完成后的结果地址。

支持平台:

FT78NE MT7004

备注

  • FT78NE 支持 int8, int16, int32, fp32, fp64, cplx64, cplx128

  • MT7004 支持 int16, int32, fp16, fp32, cplx64

  • 复数类型(cplx64 / cplx128)在内存中以连续的 [实部, 虚部] 形式存储,OnesLike 将其设置为 [1.0, 0.0]。

  • 共享存储版本在内部使用 DMA 加速和“加倍拷贝法”以提高填充效率。

共享存储版本:

void i8_ones_like_s(int8_t *output, int length, int core_mask)
void i16_ones_like_s(int16_t *output, int length, int core_mask)
void i32_ones_like_s(int32_t *output, int length, int core_mask)
void hp_ones_like_s(half *output, int length, int core_mask)
void fp_ones_like_s(float *output, int length, int core_mask)
void dp_ones_like_s(double *output, int length, int core_mask)
void c64_ones_like_s(float *output, int length, int core_mask)
void c128_ones_like_s(double *output, int length, int core_mask)

C调用示例:

 1//FT78NE示例(共享存储)
 2#include <stdio.h>
 3#include "78NE/utils.h"
 4
 5int main(int argc, char* argv[]) {
 6    float *output = (float *)0xB0000000;   // 输出在 DDR 空间
 7    int length = 960001;
 8    int core_mask = 0x0B; // 使用核心 0, 1, 3
 9    fp_ones_like_s(output, length, core_mask);
10    return 0;
11}

私有存储版本:

void i8_ones_like_p(int8_t *output, int length)
void i16_ones_like_p(int16_t *output, int length)
void i32_ones_like_p(int32_t *output, int length)
void hp_ones_like_p(half *output, int length)
void fp_ones_like_p(float *output, int length)
void dp_ones_like_p(double *output, int length)
void c64_ones_like_p(float *output, int length)
void c128_ones_like_p(double *output, int length)

C调用示例:

1//MT7004 示例(私有存储)
2#include <stdio.h>
3
4int main(int argc, char* argv[]) {
5    float *output = (float *)0x10002000;
6    int length = 1024;
7    fp_ones_like_p(output, length);
8    return 0;
9}